#ifndef ABSTRACTFACTORY_H
#define ABSTRACTFACTORY_H


class AbstractProductA;
class AbstractProductB;
class AbstractFactory{
    public:
    virtual ~AbstractFactory();
    virtual AbstractProductA* CreateProductA() = 0;
    virtual AbstractProductB* CreateProductB() = 0;
    protected:
    AbstractFactory();
    private:
};
class ConcreteFactory1:public AbstractFactory{
    public:
    ConcreteFactory1();
    ~ConcreteFactory1();
    AbstractProductA* CreateProductA();
    AbstractProductB* CreateProductB();
    protected:
    private:
};
class ConcreteFactory2:public AbstractFactory{
    public:
    ConcreteFactory2();
    ~ConcreteFactory2();
    AbstractProductA* CreateProductA();
    AbstractProductB* CreateProductB();
    protected:
    private:
};
#endif // ABSTRACTFACTORY_H
